﻿using System;
using System.Collections.Generic;
using System.Text;

using ECCIT;
using OgilvyOne.UKNow.Model;
using OgilvyOne.UKNow.Utility;

namespace OgilvyOne.UKNow.IDAL
{
    public interface IDALWarmup
    {
        
        #region 获取数据接口
        /// <summary>
        ///     根据作品ID获取作品
        /// </summary>
        /// <param name="id">作品ID</param>
        /// <returns>如果存在，返回WarmupModel，如果不存在，返回null</returns>
        WarmupModel GetWarmupModelByID(int? id);
        
        /// <summary>
        ///     获取作品所有数据，默认根据最后修改时间倒排序
        /// </summary>
        /// <returns></returns>
        IList<WarmupModel> GetAllWarmupModels();

        /// <summary>
        ///     获取所有已发布作品数据，默认根据最后修改时间倒排序
        /// </summary>
        /// <param name="pagingParams">分页参数</param>
        /// <returns></returns>
        PagingList GetPublishedWarmupModels(PagingParameter pagingParams);

        /// <summary>
        ///     获取所有已发布作品数据，部分语言，默认按照最后修改时间倒排序
        /// </summary>
        /// <param name="pagingParams"></param>
        /// <returns></returns>
        PagingList GetAllPublishedWarmupModels(PagingParameter pagingParams);

        #endregion

        #region 操作数据接口
        /// <summary>
        ///     保存作品
        /// </summary>
        /// <param name="modelInfo">作品数据对象</param>
        /// <returns>
        ///     通过判断ResultInfo.Result为true还是false获取保存是否成功
        ///     如果ResultInfo.Result为true，可以通过ResultInfo.ReturnedObject获取modelInfo
        ///     如果ResultInfo.Result为false，可以通过ResultInfo.Message获取错误提示，通过ResultInfo.Exception获取异常信息
        /// </returns>
        ResultInfo Save(WarmupModel modelInfo);
        
        /// <summary>
        ///     根据作品数据ID列表删除作品数据
        /// </summary>
        /// <param name="idList">作品ID列表</param>
        /// <returns>
        ///     通过判断ResultInfo.Result为true还是false获取删除是否成功
        ///     如果ResultInfo.Result为false，可以通过ResultInfo.Message获取错误提示，通过ResultInfo.Exception获取异常信息
        /// </returns>
        ResultInfo Delete(IList<int?> idList);

        /// <summary>
        ///     根据作品id列表将作品置为已发布状态
        /// </summary>
        /// <param name="idList">作品ID列表</param>
        /// <returns></returns>
        ResultInfo Publish(IList<int?> idList);

        /// <summary>
        ///     根据作品id列表将作品置为未发布状态
        /// </summary>
        /// <param name="idList">作品ID列表</param>
        /// <returns></returns>
        ResultInfo UnPublish(IList<int?> idList);

        /// <summary>
        ///     对作品进行投票
        /// </summary>
        /// <param name="id">作品id</param>
        /// <returns></returns>
        ResultInfo Vote(int? id);

        /// <summary>
        ///     对作品进行转发
        /// </summary>
        /// <param name="id">作品id</param>
        /// <returns></returns>
        ResultInfo Forward(int? id);

        ResultInfo AddCommentCount(int? id);

        ResultInfo SubtractCommentCount(int? id);

        /// <summary>
        ///     获取投票数量排序参数
        /// </summary>
        /// <returns></returns>
        SortingParameter SortedByVoteCount(SortOrderPair sortOrder);

        /// <summary>
        ///     获取转发数量排序参数
        /// </summary>
        /// <returns></returns>
        SortingParameter SortedByForwardCount(SortOrderPair sortOrder);

        /// <summary>
        ///     获取评论数量排序参数
        /// </summary>
        /// <returns></returns>
        SortingParameter SortedByCommentCount(SortOrderPair sortOrder);
        #endregion
    }
}
